package com.loy;

import com.loy.entity.HelloProto;
import com.loy.entity.HelloServiceGrpc;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;

import java.util.Iterator;

public class GrpcClient3 {

    public static void main(String[] args) {
        // 1. 创建和服务器端进行通信的管道
        ManagedChannel managedChannel = ManagedChannelBuilder.forAddress("localhost", 9000).usePlaintext().build();
        // 2.获得代理对象 xx stub ,这里使用了阻塞的方式，就是指，我们要等到服务器都把所有的数据都响应到客户端之后，客户端才能继续往下执行，显然这样是不符合实际业务场景的
        // 所以我们需要使用 异步监听，来监听 服务器端响应回来的数据
        HelloServiceGrpc.HelloServiceBlockingStub helloServiceBlockingStub = HelloServiceGrpc.newBlockingStub(managedChannel);
        // 3. 完成rpc的调用了
        // 3.1 准备发送给服务器端的参数
        HelloProto.HelloRequest.Builder builder = HelloProto.HelloRequest.newBuilder();
        builder.setName("sunshuai");
        HelloProto.HelloRequest helloRequest = builder.build();
        // 调用远程方法，获取返回值
        Iterator<HelloProto.HelloResponse> iterator = helloServiceBlockingStub.c2ss(helloRequest);
        while (iterator.hasNext()){
            HelloProto.HelloResponse result = iterator.next();
            System.out.println("result  = " + result);
        }




    }
}
